/**
 * 
 */
package analysatoren;

import java.util.Map;

import datensaetze.Analysator;
import datensaetze.Datensatz;
import datensaetze.Feld;
import datensaetze.LineOfSubfields;
import exceptions.IllFormattedLineException;
import exceptions.NoPreferredNameException;

public class Analysator130 extends datensaetze.Analysator {

	private Analysator130() {
		mainTag = "130";
	}

	private static Analysator130 theAnalysator130 = new Analysator130();

	public static Analysator130 getTheAnalysator() {
		return theAnalysator130;
	}

	public static void anmeldenBei(Map<String, Analysator> actions) {
		getTheAnalysator().anmelden(actions);
	}

	@Override
	public boolean analyzeTag(Feld feld, String tag, String info)
			throws NoPreferredNameException {
		if (info == null)
			throw new IllegalArgumentException(tag + info);
		Feld130 f = (Feld130) feld;
		try {
			final boolean idnInExclamationMarks = false; // Keine Expansion möglich
			LineOfSubfields field =
				new LineOfSubfields(info, 'a', idnInExclamationMarks);
			f.addField(field);
			Feld vorzug = feld.getDatensatz().getVorzugsbenennung();
			if (vorzug != null && (vorzug != feld))
				throw new NoPreferredNameException(
						"Mehrfache Vorzugsbenennung");
			feld.getDatensatz().setVorzugsbenennung(f);
		} catch (IllFormattedLineException e) {
			// Hier nicht tolerabel
			System.err.println(info);
			throw new NoPreferredNameException("Fehler in der Ansetzung. ");
		}
		return true; // geht, da im Fehlerfall IMMER eine Ausnahme geworfen
						// wird.
	}

	@Override
	public Feld130 getFeld(Datensatz ds) {
		return (Feld130) super.getFeld(ds);
	}

	@Override
	public Feld130 getNeuesFeld() {
		return new Feld130();
	}

	public static class Feld130 extends Feld1XX {
		@Override
		public String strukturiert() {
			return "Werktitel:" + super.strukturiert();
		}
	}

}